 #include "LED.H"
 #include "main.h"
unsigned int timer = 0;
unsigned char HC595_data = 0x00;
unsigned char RGB_data   = 0x00; 

unsigned char led[6] = {0, 0, 0, 0, 0, 0};// 定义LED数组，用于存储每个LED灯的当前亮度值
unsigned char RGBX[3] = {0, 0, 0};// 定义RGB数组，用于存储RGB LED的当前亮度值
unsigned char RGB_buff[4] = {0x01,0x02,0x04,0x07}; 


void LEDCycle()
{
    unsigned char i; // 循环变量
  
    static unsigned long pwmu[4] = {20, 150, 250, 450};// 静态数组，存储每个LED灯的PWM值，效果不理想改就是了
   // static unsigned long pwmu[4] = {20, 180, 240, 300};// 静态数组，存储每个LED灯的PWM值，效果不理想改就是了
    
    
    static unsigned char pwmsw = 0x0F; // 静态变量，用于控制每个LED灯的亮度变化方向

    // 遍历所有LED
    for (i = 0; i < 4; i++)
    {
        // 计算当前LED灯的亮度值，并存储在led数组中
        led[i] = pwmu[i] / 10;

        // 根据pwmsw的相应位来决定是增加还是减少pwmu[i]的值
        if (pwmsw & (0x01 << i)) // 如果pwmsw的第i位为1
        {
            pwmu[i] -= 3; // 减少亮度
        }
        else 
        {
            pwmu[i] += 16; // 增加
        }

        // 如果pwmu[i]的值达到或超过700，则改变方向，开始减少亮度
        if (pwmu[i] >= 1000)
        {
            pwmsw |= (0x01 << i); // 设置pwmsw的第i位为1
        }
        // 如果pwmu[i]的值小于或等于5，则改变方向，开始增加亮度
        if (pwmu[i] <= 5)
        {
            pwmsw &= ~(0x01 << i); // 清除pwmsw的第i位
        }
    }

    // 计算RGB LED的亮度值，并存储在RGBX数组中
    RGBX[0] = pwmu[3] /3; 
    RGBX[1] = pwmu[2] /15; 
    RGBX[2] = pwmu[1] /30; 

}

void LED_update(unsigned char* LEDX)
{
    static unsigned char i = 0; // 循环变量
    static unsigned char current = 0; // 循环变量
    unsigned char n = 0;       // 循环变量

    // 填入 4个 LED 数据
    for (n = 0; n < 4; n++) // 1  1 1 1   1  1 1 1
    {
        if (i < LEDX[n])                   //大于对于亮度 开启 
            HC595_data = HC595_data | (0x08 << n);
        else                                //小于对于亮度 关闭
            HC595_data = HC595_data & ~(0x08 << n);
    }

        for (n = 0; n < 3; n++) // 1  1 1 1   1  1 1 1
    {
        if (i < RGBX[n])                   //大于对于亮度 开启 
            HC595_data = HC595_data | (0x01 << n);
        else                                //小于对于亮度 关闭
            HC595_data = HC595_data & ~(0x01 << n);
    }
       
           if(timer%(50)==0)
           {
                current++;
                 if (current%4==0)
                 {
                    current=1;                  
                 }
                          
            }  
    
                        

    if (++i == 90) i = 0;  
    if(Music_flag==0)
    {

         HC595_send(~HC595_data);
         
    }

            
}


void timer2_init(void)	//定时器2初始化	T2无优先级控制位，自动为低级中断
												//1毫秒@12.000MHz
{
	AUXR &= 0xFB;			//定时器时钟12T模式
	T2L = 0x18;				//设置定时初始值
	T2H = 0xFC;				//设置定时初始值
	AUXR |= 0x10;			//定时器2开始计时
	IE2 |= 0x04;			//使能定时器2中断(0x00打开0x04关闭)
	EA=1;					//总中断允许标志位置1
//    AUXR |= 0x04;		//定时器时钟1T模式
//	T2L = 0xCD;			//设置定时初始值
//	T2H = 0xD4;			//设置定时初始值
//	AUXR |= 0x10;		//定时器2开始计时
//	IE2 |= 0x04;
//	EA = 1;
}

